package com.sinsz.wxpn.open.base;

import com.sinsz.wxpn.open.base.support.MaterialCreateType;
import com.sinsz.wxpn.open.base.support.MaterialType;

import java.io.File;

/**
 * 基本接口
 * @author chenjianbo
 * @date 2018-11-12
 */
public interface BaseService {

    /**
     * 获取网页授权后的参数校验方法
     * @param openid            用户公众号内唯一ID
     * @param tag               自定义参数
     * @param timestamp         时间戳
     * @param sign              原始返回签名
     * @return                  是否通过校验：true表示通过；false表示未通过；
     */
    boolean oauthSignatureComparison(String openid, String tag, String timestamp, String sign);

    /**
     * 基础支持 - 获取接口授权token
     * @return      token信息对象
     */
    String fetchToken();

    /**
     * 获取微信服务器IP地址
     * @param token         接口授权Token
     * @return              IP列表
     */
    String fetchCallbackIP(String token);

    /**
     * 网络检测
     * @param token     接口授权Token
     * @return          检测列表
     */
    String fetchCheckIP(String token);

    /**
     * 获取素材列表
     * @param token     接口授权token
     * @param material  素材类型
     * @param offset    偏移量（从第几条开始查询返回列表）
     * @return          素材列表信息
     */
    String fetchMaterialList(String token, MaterialType material, int offset);

    /**
     * 创建素材模板
     * <p>
     *     不支持创建图文素材
     * </p>
     * @param token             接口授权token
     * @param material          上传类型
     * @param title             标题
     * @param introduction      描述
     * @param filePath          待上传文件路径
     * @return                  结果
     */
    String createMaterial(String token, MaterialCreateType material, String title, String introduction, String filePath);

    /**
     * 创建素材模板
     * <p>
     *     不支持创建图文素材
     * </p>
     * @param token             接口授权token
     * @param material          上传类型
     * @param title             标题
     * @param introduction      描述
     * @param media             待上传文件
     * @return                  结果
     */
    String createMaterial(String token, MaterialCreateType material, String title, String introduction, File media);

    /**
     * 根据媒体ID获取素材详情
     * @param token             接口授权token
     * @param mediaId           媒体ID
     * @return                  详情
     */
    String fetchMaterialByMediaId(String token, String mediaId);

    /**
     * 根据媒体ID删除素材
     * @param token             接口授权token
     * @param mediaId           媒体ID
     * @return                  详情
     */
    String delMaterialByMediaId(String token, String mediaId);

}
